/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Modelo.DAL;

import Modelo.Solicitud;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.json.JSONArray;
import org.json.JSONObject;

/**
 *
 * @author glpc
 */
public class Solicitud_DAO {

    public static boolean insertarSolicitud(Solicitud sol) {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;

        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error Insertando una Solicitud!");
            return false;
        }
        String date = "";
        if (sol.getFecha_ocurrencia() == null) {
            date = " NULL";
        } else {
            date = "to_date('" + sol.getFecha_ocurrencia() + "',  'dd/mm/yyyy')";
        }
        String query = "INSERT INTO solicitud "
                + " (nombre, telefono, correo, fecha_ocurrencia, "
                + " fecha_solicitud, status, prioridad, categoria, descripcion) "
                + " VALUES ("
                + "'" + sol.getNombre() + "',"
                + " " + sol.getTelefono() + ","
                + "'" + sol.getCorreo() + "',"
                + date + ","
                + " date('now'),"
                + "'" + sol.getStatus() + "',"
                + " NULL ,"
                + "'" + sol.getCategoria() + "',"
                + "'" + sol.getDescripcion() + "')";
        System.out.println(query);
        try {
            s.executeUpdate(query);
            return true;
        } catch (SQLException se) {
            se.printStackTrace();
            System.out.println("Error al insertar una Solicitud... " + se.getMessage());
            return false;
        }
    }

    public static JSONObject consultarSolicitud(Solicitud sol, String limit, String offset, String order, String asc) {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;
        ResultSet rs = null;
        JSONObject solicitudes = new JSONObject();
        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error Consultando las Inspecciones!");
            return null;
        }

        try {
            String query = "SELECT sol.id_solicitud, sol.nombre, sol.telefono, "
                    + "sol.correo, to_char(sol.fecha_ocurrencia,'DD-MM-YYYY'), "
                    + "to_char(sol.fecha_solicitud,'DD-MM-YYYY'), sol.status, "
                    + "sol.prioridad, sol.categoria, sol.descripcion from solicitud sol "; //to_char(a.fecha_modificacion,'DD-MM-YYYY') "
            String params = "WHERE (1=1) ";

            if (sol.getId_solicitud() != null && !sol.getId_solicitud().equals("")) {
                params += "and sol.id_solicitud = '" + sol.getId_solicitud() + "' ";
            }
            if (sol.getCategoria() != null && !sol.getCategoria().equals("")) {
                params += "and sol.categoria = '" + sol.getCategoria() + "' ";
            }
            if (sol.getFecha_ocurrencia() != null && !sol.getFecha_ocurrencia().equals("")) {
                params += "and sol.fecha_ocurrencia = '" + sol.getFecha_ocurrencia() + "' ";
            }
            if (sol.getFecha_solicitud() != null && !sol.getFecha_solicitud().equals("")) {
                params += "and sol.fecha_solicitud = '" + sol.getFecha_solicitud() + "' ";
            }
            if (sol.getStatus() != null && !sol.getStatus().equals("")) {
                params += "and sol.status = '" + sol.getStatus() + "' ";
            }
            if (sol.getPrioridad() != null && !sol.getPrioridad().equals("")) {
                params += "and sol.prioridad = '" + sol.getPrioridad() + "' ";
            }

            String format = "";
            if (order != null && !order.equals("")) {
                format += " order by " + order;
                if (asc != null && !asc.equals("") && asc.equals("false")) {
                    format += " desc";
                } else {
                    format += " asc";
                }
            }

            if (limit != null && !limit.equals("")) {
                format += " limit " + limit;
            }
            if (offset != null && !offset.equals("")) {
                format += " offset " + offset;
            }

            rs = s.executeQuery(query + params + format);
            JSONArray ja = new JSONArray();
            int i = 0;
            while (rs.next()) {
                JSONObject solicitud = new JSONObject();
                solicitud.put("id_solicitud", rs.getString(1));
                solicitud.put("nombre", rs.getString(2));
                solicitud.put("telefono", rs.getString(3));
                solicitud.put("correo", rs.getString(4));
                solicitud.put("fecha_ocurrencia", rs.getString(5));
                solicitud.put("fecha_solicitud", rs.getString(6));
                solicitud.put("status", rs.getString(7));
                solicitud.put("prioridad", rs.getString(8));
                solicitud.put("categoria", rs.getString(9));
                solicitud.put("descripcion", rs.getString(10));
                ja.put(i++, solicitud);
            }
            solicitudes.put("solicitudes", ja);
            
            query = "select count(*) from solicitud sol " + params;
            rs = s.executeQuery(query);
            if (rs.next()) {
                solicitudes.put("tam", rs.getString(1));
            }
            return solicitudes;
        } catch (SQLException se) {
            System.out.println("Error Consultado el Inspeccion\n" + se.getMessage());
            return solicitudes;
        } catch (Exception e) {
            System.out.println("Error obteniendo data de la Inspeccion\n" + e.getMessage());
            return solicitudes;
        }
    }

    public static boolean actualizarSolicitud(Solicitud i) {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;

        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error actualizando una Solicitud!");
            return false;
        }
        String query = "UPDATE solicitud set ";
        query += " nombre = '" + i.getNombre() + "', ";
        query += " telefono = " + i.getTelefono() + ", ";
        query += " correo = '" + i.getCorreo() + "', ";
        query += " fecha_solicitud = to_date('" + i.getFecha_solicitud() + "','dd/mm/yyyy'), ";
        if (i.getFecha_ocurrencia() == null) {
            query += " fecha_ocurrencia = " + null + ", ";
        } else {
            query += " fecha_ocurrencia = to_date('" + i.getFecha_ocurrencia() + "','dd/mm/yyyy'), ";
        }
        query += " prioridad = " + i.getPrioridad() + ", ";
        query += " categoria = '" + i.getCategoria() + "', ";
        query += " descripcion ='" + i.getDescripcion() + "', ";
        query += " status ='" + i.getStatus() + "' ";
        query += " where id_solicitud = " + i.getId_solicitud();
        System.out.println(query);
        try {
            s.executeUpdate(query);
            return true;
        } catch (SQLException se) {
            se.printStackTrace();
            System.out.println("Error al actualizar la Solicitud");
            return false;
        }
    }
}
